## Warning: package 'geojsonio' was built under R version 3.5.2
## Warning: package 'shape' was built under R version 3.5.2
## Warning: package 'shinythemes' was built under R version 3.5.2
## Warning: package 'kableExtra' was built under R version 3.5.2
La fouille de données (data mining) permet de faire un lien entre les statistiques et les technologies de l’information (base de données, intelligence artificielle, apprentissage automatique (machine learning), utilisée pour la recherche d’informations dans les grandes bases de données médicales ou de santé. Les outils de collecte automatique des données et bases de données permettent de stocker dans des entrepôts d’énormes masses de données. La fouille de données et les entrepôts permettent l’extraction de connaissances.
L’utilisation de ces masses de données, issues de structures médicales, peut permettre d’acquérir de nouvelles connaissances via différents types d’études. Notamment avec le logiciel R.
Dans ce projet on est amenées à Construire un mini-entrepôt de données environnementales au format i2b2 Construire une application shiny pour explorer notre entrepôt de données Analysez la corrélation entre exposition environnementales et répartition des patients atteints de la maladie X par des méthodes de statistiques spatiales.
Pour l’aboutissement de notre projet nous avons choisis deux jeux de données : -polluants par établissements avec localisation établissements qui se compose de 9572 observations et 6 variables et 14954 observations et 15 variables provenant du site : https://public.opendatasoft.com/explore/dataset/registre-francais-des-emission-polluantes-etablissements/table/ -Radon se compose de 36104 observations et 5 variables et provient du site : https://www.data.gouv.fr/fr/datasets/connaitre-le-potentiel-radon-de-ma-commune/
Le registre des rejets et des transferts de polluants (RRTP) est un inventaire national des substances chimiques et/ou des polluants potentiellement dangereux rejetés dans l’air, l’eau et le sol de la production et du traitement des déchets dangereux et non dangereux Les attributs de cette base sont :
## Parsed with column specification:
## cols(
## nom = col_character(),
## codeCommune = col_character(),
## nomCommune = col_character(),
## cp = col_character(),
## designationAPE = col_character(),
## designationEPRTR = col_character()
## )
## Warning: 9572 parsing failures.
## row col expected actual file
## 1 -- 6 columns 7 columns 'data/etablissement.csv'
## 2 -- 6 columns 7 columns 'data/etablissement.csv'
## 3 -- 6 columns 7 columns 'data/etablissement.csv'
## 4 -- 6 columns 7 columns 'data/etablissement.csv'
## 5 -- 6 columns 7 columns 'data/etablissement.csv'
## ... ... ......... ......... ........................
## See problems(...) for more details.
## nom codeCommune nomCommune
## Length:9572 Length:9572 Length:9572
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
## cp designationAPE designationEPRTR
## Length:9572 Length:9572 Length:9572
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
Liste des Etablissements polluants selon GeoRisque
localisationParEtablissement <- read_delim("data/registre-francais-des-emission-polluantes-etablissements.csv" , ";" , escape_double = FALSE , trim_ws = TRUE)
## Parsed with column specification:
## cols(
## Identifiant = col_character(),
## `Nom Etablissement` = col_character(),
## `Numéro Siret` = col_character(),
## Adresse = col_character(),
## `Code Postal` = col_character(),
## Commune = col_character(),
## Departement = col_character(),
## Region = col_character(),
## coordonnées_x = col_character(),
## coordonnées_y = col_character(),
## `Code APE` = col_character(),
## `Libellé APE` = col_character(),
## `Code Eprtr` = col_character(),
## `Libelle Eprtr` = col_character(),
## coordonnees = col_character()
## )
summary(localisationParEtablissement)
## Identifiant Nom Etablissement Numéro Siret
## Length:14954 Length:14954 Length:14954
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
## Adresse Code Postal Commune
## Length:14954 Length:14954 Length:14954
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
## Departement Region coordonnées_x
## Length:14954 Length:14954 Length:14954
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
## coordonnées_y Code APE Libellé APE
## Length:14954 Length:14954 Length:14954
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
## Code Eprtr Libelle Eprtr coordonnees
## Length:14954 Length:14954 Length:14954
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
knitr::opts_chunk$set(echo = TRUE)
Liste des Etablissements avec leur localisation Le radon qui est un gaz radioactif produit par la désintégration naturelle de l’uranium présent dans les roches. Cancérigène pulmonaire, il présente un risque pour la santé lorsqu’il s’accumule dans les bâtiments. L’étude de jeux de données nous permet de voir le potentiel radon dans chaque commune, les attributs de cette base de données sont :
## Parsed with column specification:
## cols(
## nom_comm = col_character(),
## nom_dept = col_character(),
## insee_com = col_character(),
## classe_potentiel = col_double(),
## reg = col_character()
## )
## Warning: 2 parsing failures.
## row col expected actual file
## 17174 classe_potentiel a double #VALEUR! 'data/radon.csv'
## 17183 classe_potentiel a double #VALEUR! 'data/radon.csv'
## nom_comm nom_dept insee_com classe_potentiel
## Length:36104 Length:36104 Length:36104 Min. :1.000
## Class :character Class :character Class :character 1st Qu.:1.000
## Mode :character Mode :character Mode :character Median :1.000
## Mean :1.449
## 3rd Qu.:2.000
## Max. :3.000
## NA's :2
## reg
## Length:36104
## Class :character
## Mode :character
##
##
##
##
Potentiel Radon
Après avoir choisi les deux jeux de données, bien les analyser et étudier on est passé à l’étape de la construction de notre entrepôt de données à partir des deux jeux donnés Et cela au format i2b2 (Informatics for Integrating Biology & the Bedside) Donc la fouille de données qui consistait à analyser les jeux de données choisit nous a permis d’extraire des connaissances. Regrouper des techniques statistiques et ainsi pouvoir construire notre propre entrepôt de données. Les données de notre entrepôt au format i2b2 résident est décrite dans le schéma en étoile suivant qui est la structure de données la plus utilisée et la plus appropriée aux requêtes et analyses des utilisateurs d’entrepôts de données
A caption
Comme le décrit le schéma ci-dessus : La Table centrale « commune » qui contient les données observables les faits qui sont numérique et d’ordre quantitatif que l’on possède que l’on veut étudier (classe Radon, nombre établissement par département et commune …), selon divers axes d’analyse les dimensions qui sont les tables de dimensions (informations, localisation établissement, localisation, établissement polluant) selon lesquels on veut étudier les données observables (les faits).
1-Création de la base de données: On a créé la table Établissement qui est la jointure entre la table polluant Par Établissement et localisation Par Établissement on change les noms des colonnes pour eviter les problemes d’encodage . on a aussi separé l’attribut coordonnées en deux colonnes : longitude et latitude
EtablissementsPolluants <- polluants %>% dplyr::select( nom ) %>%
setnames(old=c("nom"), new=c("Nom Etablissement")) %>%
merge(localisationParEtablissement,by="Nom Etablissement")
EtablissementsPolluants <- setDT(EtablissementsPolluants)[, paste0("type", 1:2) := tstrsplit(coordonnees, ",", type.convert = TRUE, fixed = TRUE)] %>%
setnames(old=c("type1","type2"), new=c("lng","lat"))
EtablissementsPolluants <- EtablissementsPolluants %>% filter(!is.na(EtablissementsPolluants$lat))
colnames(EtablissementsPolluants)[12] <- "Libelle_APE"
colnames(EtablissementsPolluants)[1] <- "Nom_etablissement"
colnames(EtablissementsPolluants)[3] <- "Num_Siret"
colnames(EtablissementsPolluants)[11] <- "CODE_APE"
colnames(EtablissementsPolluants)[13] <- "CODE_Eprtr"
tableau(EtablissementsPolluants[1:10,])
| Nom_etablissement | Identifiant | Num_Siret | Adresse | Code Postal | Commune | Departement | Region | coordonnées_x | coordonnées_y | CODE_APE | Libelle_APE | CODE_Eprtr | Libelle Eprtr | coordonnees | lng | lat |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ‘ONYX Auv. Rhône Alpes’‘Plateforme de production d’amendement Organique’’’ | 056.01460 | 30259089800516 | Champ Viollant | 63260 | AUBIAT | PUY-DE-DOME | AUVERGNE | 667141.2 | 2109301.48 | 3821Z | Traitement et élimination des déchets non dangereux | 5.(c) | Installations destinées à l’élimination des déchets non dangereux d’une capacité de 50 tonnes par jour | 45.9806220489, 3.20302004009 | 45.98062 | 3.203020 |
| ‘Onyx Auvergne Rhône Alpes’‘Auvergne Déchets Spéciaux’’’ | 056.00360 | 30259089800490 | Rue François Arago ZI Sud | 63360 | GERZAT | PUY-DE-DOME | AUVERGNE | 662577 | 2091585 | 3812Z | Collecte des déchets dangereux | 5.(a) | Installations pour la valorisation ou l’élimination des déchets dangereux recevant 10 tonnes par jour | 45.8216749812, 3.1417817053 | 45.82167 | 3.141782 |
| .SYNTHEXIM | 070.00882 | 41444299600024 | .ZI des Dunes Rue des Mouettes | 62100 | CALAIS | PAS-DE-CALAIS | NORD-PAS-DE-CALAIS | 569213.5892939 | 2663865.1717914 | 2110Z | Fabrication de produits pharmaceutiques de base | 4.(e) | Installations utilisant un procédé chimique ou biologique pour la fabrication industrielle de produits pharmaceutiques de base | 50.9670870286, 1.89935000532 | 50.96709 | 1.899350 |
| 1° RHC | 090.00115 | 15400074900015 | quartier LA HORIE Phalsbourg | 57373 | PHALSBOURG | MOSELLE | LORRAINE | 957705 | 2430229 | 8422Z | Défense | NA | NA | 48.770838746, 7.20355174478 | 48.77084 | 7.203552 |
| 1000 PIECES AUTOS | 062.06362 | 42159285800011 | rue Jean Prouvé | 57600 | FORBACH | MOSELLE | LORRAINE | 930809 | 2473458 | 4532Z | Commerce de détail d’équipements automobiles | 5.(a) | Installations pour la valorisation ou l’élimination des déchets dangereux recevant 10 tonnes par jour | 49.1730717207, 6.87233533978 | 49.17307 | 6.872335 |
| 12° base de soutien du matériel | 090.00017 | 15000062800019 | Route du camp | 36100 | NEUVY-PAILLOUX | INDRE | CENTRE | 562585 | 2208900 | 8422Z | Défense | 2.(f) | Installations de traitement de surface de métaux et des matières plastiques utilisant un procédé électrolytique ou chimique lorsque le volume des cuves affectées au traitement est égal à 30 m3 | 46.8789631151, 1.84564020341 | 46.87896 | 1.845640 |
| 12e BSMAT - Détachement de GIEN | 090.00141 | 15000082600019 | 97 - avenue Wilson BP 70029 45501 GIEN Cedex | 45500 | GIEN | LOIRET | CENTRE | 622133.567 | 2299665.309 | 8422Z | Défense | NA | NA | 47.6961111769, 2.63138874436 | 47.69611 | 2.631389 |
| 12ème Régiment de Cuirassiers | 090.00259 | 13001364200017 | Quartier Valmy BP 119 | 45161 | OLIVET | LOIRET | CENTRE | 565655.854 | 2313276.541 | 8422Z | Défense | NA | NA | 47.8179948595, 1.87792691809 | 47.81799 | 1.877927 |
| 13ème Base de Soutien du Matériel | 090.00011 | 15400005300384 | Rue de l’arsenal BP 20 | 63035 | CLERMONT-FERRAND | PUY-DE-DOME | AUVERGNE | 662000 | 2088600 | 8422Z | Défense | 2.(f) | Installations de traitement de surface de métaux et des matières plastiques utilisant un procédé électrolytique ou chimique lorsque le volume des cuves affectées au traitement est égal à 30 m3 | 45.7948739418, 3.13396807135 | 45.79487 | 3.133968 |
| 13ème BSMAT - Détachement de Moulins | 090.00254 | 15000065100011 | Détachement de Moulins 57 - rue des Époux Contoux BP 74 | 03402 | YZEURE | ALLIER | AUVERGNE | 677503 | 2172031 | 8422Z | Défense | NA | NA | 46.5438436592, 3.34712959593 | 46.54384 | 3.347130 |
Table 1 : Etablissement Polluant ainsi que leur localisation Ensuite on a fait la jointure de la table crée et la table radon selon le Département et les communes afin d’eviter un maximum les NAs.on a eu besoin d’une normalisation de texte pour garantir les matches entres les attribus
EtablissementsPolluants$Departement <- gsub("[[:punct:]]", "", as.character(EtablissementsPolluants$Departement))
radon$nom_dept <- gsub("[[:punct:]]", "", as.character(radon$nom_dept))
EtablissementsPolluants$Departement <- tolower(EtablissementsPolluants$Departement)
radon$nom_dept <- tolower(radon$nom_dept)
EtablissementsPolluants <- EtablissementsPolluants %>% filter(!is.na(Departement))%>% group_by(Departement)
radon <- radon %>% filter(!is.na(nom_dept)) %>% group_by(nom_dept)
EtablissementsPolluants$Commune <- gsub("[[:punct:]]", "", as.character(EtablissementsPolluants$Commune))
radon$nom_comm <- gsub("[[:punct:]]", "", as.character(radon$nom_comm))
EtablissementsPolluants$Commune <- tolower(EtablissementsPolluants$Commune)
radon$nom_comm <- tolower(radon$nom_comm)
EtablissementsPolluants <- EtablissementsPolluants %>% filter(!is.na(Commune))%>% group_by(Commune)
radon <- radon %>% filter(!is.na(nom_comm)) %>% group_by(nom_comm)
EtablissementRadon <- merge(radon,EtablissementsPolluants,by.x=c("nom_comm","nom_dept"),by.y=c("Commune","Departement"),all.x=F,all.y=T)
EtablissementRadon <- EtablissementRadon %>% dplyr::filter(!is.na(EtablissementRadon$lng))
tableau(EtablissementRadon[1:10,])
| nom_comm | nom_dept | insee_com | classe_potentiel | reg | Nom_etablissement | Identifiant | Num_Siret | Adresse | Code Postal | Region | coordonnées_x | coordonnées_y | CODE_APE | Libelle_APE | CODE_Eprtr | Libelle Eprtr | coordonnees | lng | lat |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| abbeville | somme | 80001 | 1 | FR | REVIVAL | 051.04391 | 61662009200133 | Zone d’entrepôt Rue Ventose | 80100 | PICARDIE | 565871.71 | 2567726.27 | 3831Z | Démantèlement d’épaves | NA | NA | 50.1044595053, 1.86018678173 | 50.10446 | 1.860187 |
| abbeville | somme | 80001 | 1 | FR | REVIVAL | 051.04391 | 61662009200133 | Zone d’entrepôt Rue Ventose | 80100 | PICARDIE | 565871.71 | 2567726.27 | 3831Z | Démantèlement d’épaves | NA | NA | 50.1044595053, 1.86018678173 | 50.10446 | 1.860187 |
| abbeville | somme | 80001 | 1 | FR | REVIVAL | 051.04391 | 61662009200133 | Zone d’entrepôt Rue Ventose | 80100 | PICARDIE | 565871.71 | 2567726.27 | 3831Z | Démantèlement d’épaves | NA | NA | 50.1044595053, 1.86018678173 | 50.10446 | 1.860187 |
| abbeville | somme | 80001 | 1 | FR | REVIVAL | 051.04391 | 61662009200133 | Zone d’entrepôt Rue Ventose | 80100 | PICARDIE | 565871.71 | 2567726.27 | 3831Z | Démantèlement d’épaves | NA | NA | 50.1044595053, 1.86018678173 | 50.10446 | 1.860187 |
| abbeville | somme | 80001 | 1 | FR | Lactinov Abbeville | 051.01699 | 38258627900012 | ZI Route de Vauchelles | 80143 | PICARDIE | 564358 | 2568159 | 1051A | Fabrication de lait liquide et de produits frais | 8.(c) | Traitement et transformation du lait d’une capacité de traitement de 200 tonnes de lait par jour (valeur moyenne sur une base annuelle) | 50.1082593515, 1.83902346142 | 50.10826 | 1.839023 |
| abbeville | somme | 80001 | 1 | FR | REVIVAL | 051.04391 | 61662009200133 | Zone d’entrepôt Rue Ventose | 80100 | PICARDIE | 565871.71 | 2567726.27 | 3831Z | Démantèlement d’épaves | NA | NA | 50.1044595053, 1.86018678173 | 50.10446 | 1.860187 |
| abbeville | somme | 80001 | 1 | FR | REVIVAL | 051.04391 | 61662009200133 | Zone d’entrepôt Rue Ventose | 80100 | PICARDIE | 565871.71 | 2567726.27 | 3831Z | Démantèlement d’épaves | NA | NA | 50.1044595053, 1.86018678173 | 50.10446 | 1.860187 |
| abbeville | somme | 80001 | 1 | FR | REVIVAL | 051.04391 | 61662009200133 | Zone d’entrepôt Rue Ventose | 80100 | PICARDIE | 565871.71 | 2567726.27 | 3831Z | Démantèlement d’épaves | NA | NA | 50.1044595053, 1.86018678173 | 50.10446 | 1.860187 |
| abbeville | somme | 80001 | 1 | FR | REVIVAL | 051.04391 | 61662009200133 | Zone d’entrepôt Rue Ventose | 80100 | PICARDIE | 565871.71 | 2567726.27 | 3831Z | Démantèlement d’épaves | NA | NA | 50.1044595053, 1.86018678173 | 50.10446 | 1.860187 |
| abbeville | somme | 80001 | 1 | FR | REVIVAL | 051.04391 | 61662009200133 | Zone d’entrepôt Rue Ventose | 80100 | PICARDIE | 565871.71 | 2567726.27 | 3831Z | Démantèlement d’épaves | NA | NA | 50.1044595053, 1.86018678173 | 50.10446 | 1.860187 |
Table 2 :Etablissement Polluant avec Potentiel Radon On a ensuite utilisé cette table pour crée un spatial Points data frame pour modéliser nos points dans la carte
coordinates(EtablissementRadon) <- ~ lng + lat
EtablissementRadon@coords <- EtablissementRadon@coords[,c(2,1)]
knitr::opts_chunk$set(echo = TRUE)
Concernant les données geographiques nous avons importé un fichier qu’on trouvé sur GiTHUB qui est un Spatial Polygon Data Frame , afin d’avoir les coordonnées des polygones selon les departements a partir des codes INSEE des communes , nous avons par la suite fait une jointure entre les données geographique et le potentiel radon ainsi que l’incidence de la maladie X [l’incidence est representé par departement (ratioEvenement)nous avons utilisé le code fait en cours pour la creation de la table (afin d’inclure la question 3 dans l’application Shiny )].
departements <- geojsonio::geojson_read("data/departements.geojson", what = "sp")
departements$nom <- gsub("[[:punct:]]", "", as.character(departements$nom ))
departements$nom <- tolower(departements$nom )
departements@data = data.frame(departements@data, ratioEvenement[match(departements@data$nom, ratioEvenement$dep),])
departements@data = data.frame(departements@data, radon[match(departements@data$nom, radon$nom_dept),])
EtablissementRadon@data= data.frame(EtablissementRadon@data, ratioRadon[match(EtablissementRadon@data$classe_potentiel, ratioRadon$classe_potentiel),])
EtablissementsPolluants$Departement <- toupper(EtablissementsPolluants$Departement)
EtablissementsPolluants$Commune <- toupper(EtablissementsPolluants$Commune)
knitr::opts_chunk$set(echo = TRUE)
On a réalisé une première carte qui représente le ratio de l’évènement de la maladie X selon les Régions
Carte 1Incidence Maladie par Departement La seconde carte représente le potentiel Radon selon les departements départementpal <-colorFactor(c("gray","yellow","red"), domain = c(1,2,3) , na.color ="white" , alpha = TRUE )
carteRadonDepartement <- leaflet(departements) %>% addProviderTiles(providers$Esri.WorldStreetMap) %>%
setView(lat = 47.256, lng = 2.35, zoom = 6) %>%
addPolygons( fillColor = ~pal(classe_potentiel),
weight = 2,
opacity = 1,
color = "white",
dashArray = "3",
fillOpacity = 0.7) %>% addLegend(pal = pal,
values = ~classe_potentiel,
opacity = 0.7,
title = "Potentiel Radon",
position = "topright")
carteRadonDepartement
knitr::opts_chunk$set(echo = TRUE)
Carte 2Potentiel Radon par Departement La troisième carte représente la carte de France par département avec des Marqueurs qui font référence à tous les établissements
col <- colorFactor(c("gray","yellow","red"), domain = c(1,2,3) , na.color ="white" , alpha = TRUE )
carteEtablissements <- leaflet(departements) %>%
addProviderTiles(providers$Esri.WorldStreetMap) %>%setView(lat = 47.256, lng = 2.35, zoom = 6) %>%
addMarkers(data = EtablissementRadon@coords,
clusterOptions = markerClusterOptions() ,
label = EtablissementRadon@data$Nom_etablissement ,
popup = str_c("<br/>Commune :<br/>",EtablissementRadon@data$nom_comm ,"<br/> num siret :<br/> " ,
EtablissementRadon@data$Num_Siret, "<br/> APE : <br/>" ,
EtablissementRadon@data$Libelle_APE ) )
carteEtablissements
knitr::opts_chunk$set(echo = TRUE)
Carte 3Etablissement Polluants
Nous avons choisis pour analysé les données de representé un histogramme interactif selon le departement : on peux choisir l’axe des X de notre Histogramme selon : Nom etablissement , Libellé APE ou code EPRTR , en y ajoutant sur Shiny un tableau pour bien lire les données
histDepartement <- function(EtablissementsPolluants, choice,ligne) {
plot <- EtablissementsPolluants %>% filter(Departement == choice) %>% group_by(Libelle_APE) %>% filter(!is.na(Libelle_APE))
plot2 <- plot[1:ligne,]
p <- ggplot(data = plot2 , aes (x=plot2$Libelle_APE,y=length(Nom_etablissement)/ligne)) +
geom_bar(aes(fill=Commune), stat="identity" , position = position_stack(reverse = TRUE)) + coord_flip() +
theme(legend.position = "bottom") +
xlab("Libellé APE") + ylab("Nombre Etablissements ") + ggtitle(choice)
ggplotly(p )
}
histDepartementNom <- function(EtablissementsPolluants, choice,ligne) {
plot <- EtablissementsPolluants %>% filter(Departement == choice) %>% group_by(Nom_etablissement) %>% filter(!is.na(Nom_etablissement))
plot2 <- plot[1:ligne,]
p <- ggplot(data = plot2 , aes (x=plot2$Nom_etablissement,y=length(Nom_etablissement)/ligne)) +
geom_bar(aes(fill=Commune), stat="identity" , position = position_stack(reverse = TRUE)) + coord_flip() +
theme(legend.position = "bottom") +
xlab("Nom Etablissement") + ylab("Nombre Etablissements ") + ggtitle(choice)
ggplotly(p )
}
histDepartementCodeEprtr <- function(EtablissementsPolluants, choice,ligne) {
plot <- EtablissementsPolluants %>% filter(Departement == choice) %>% group_by(CODE_Eprtr) %>% filter(!is.na(CODE_Eprtr))
plot2 <- plot[1:ligne,]
p <- ggplot(data = plot2 , aes (x=plot2$CODE_Eprtr,y=length(Nom_etablissement)/ligne)) +
geom_bar(aes(fill=Commune), stat="identity" , position = position_stack(reverse = TRUE)) + coord_flip() +
theme(legend.position = "bottom") +
xlab("Code Eprtr ") + ylab("Nombre Etablissements ") + ggtitle(choice)
ggplotly(p )
}
knitr::include_graphics("histogramme.png")
A caption
L’utilisations de l’application shiny nous a permis d’avoir une seule carte interactive avec laquelle on peut changer à chaque fois l’attribut que l’on voudra étudier et représenter.
Mais aussi réaliser plusieurs histogrammes et cela en choisissant à chaque fois ce qu’on veut représenter, donc changer le libellé des axis selon le Libellé APE, Libelle Eprtr, Nom établissement, Code Eprtr
Nous avons choisi de sélectionne nos valeurs par départements on a opté pour cela, car pour région il y’a énormément de valeurs et commune ou contrairement on a peu de valeurs. Donc choisir les valeurs de nos tables par département et mettre les communes en variable de couleurs étais le choix optimal que nous avons jugé objectif et satisfaisant pour notre application. Vous Pouvez trouver l’application Shiny dans le fichier AppShiny
shinyApp(
ui <- fluidPage(
theme = shinytheme("slate"),
sidebarPanel(
selectInput("axis","Choix X :" , choices = c("Libelle APE","Nom Etablissement","Code Eprtr"),selected = "Libelle APE"),
selectInput("Departement", "Departement :",
choices = EtablissementsPolluants$Departement , selected = ""),
checkboxInput("table","montrer le tableau de données",value = FALSE),
sliderInput(inputId ="size", label="Nombre De Lignes", value = 15,
min = 5, max = 150, step = 5, animate =T , width = '400px' ),
sliderInput(inputId ="opacity", label="Opacitée Incidence de la maladie X", value = 0,
min = 0, max = 2, step = 0.5, animate =T , width = '400px' ),
sliderInput(inputId ="opacityRadon", label="Opacitée Potentiel Radon Par Region", value = 0,
min = 0, max = 2, step = 0.5, animate =T , width = '400px' ),
radioButtons(inputId="points", label="Ploter des points",
choices = c("Incidence Maladie Par Commune",
"Potentiel Radon par Commune",
"Pas de Points"),
selected = "Pas de Points",
width = "400px" )
),
mainPanel(
tabsetPanel(
tabPanel("Carte Interactive",box( leafletOutput("map", width = "100%", height = "700px"),title = "Carte Interavtive pour les EtablissementsPolluants,PotentielRadon,IncidenceMaladieX",width = "100%", height = "100%")),
tabPanel("Analyse de Donnees",plotlyOutput("Plot"),
DT::dataTableOutput("tableau"))
))),
server <- function(input, output) {
output$tableau <- DT::renderDataTable({
if (input$table){
DT::datatable(data = EtablissementsPolluants %>% filter(Departement == input$Departement) %>% dplyr::select(Nom_etablissement,
Libelle_APE,
CODE_APE ,
`Libelle Eprtr`,Departement,Commune),
options = list(pageLength=10),rownames = F)
}})
output$Plot <- renderPlotly({ if(input$axis=="Libelle APE"){
histDepartement(EtablissementsPolluants,input$Departement,input$size)}
else if (input$axis=="Nom Etablissement"){ histDepartementNom(EtablissementsPolluants,input$Departement,input$size)}
else if (input$axis=="Code Eprtr"){histDepartementCodeEprtr(EtablissementsPolluants,input$Departement,input$size)
}})
output$map <- renderLeaflet({
if(input$points=="Incidence Maladie Par Commune"){
carteEtablissements %>%
addPolygons( fillColor = ~pal2(ratio),
weight = 2,
opacity = 1,
color = "white",
dashArray = "3",
fillOpacity = input$opacity)%>% addLegend(pal = pal2,
values = ~ratio,
opacity = 0.7,
title = "Ratio incidence maladie X",
position = "bottomright") %>%
addPolygons( fillColor = ~pal(classe_potentiel),
weight = 2,
opacity = 1,
color = "White",
dashArray = "3",
fillOpacity = input$opacityRadon) %>%
addLegend(pal = pal,
values = ~classe_potentiel,
opacity = 0.7,
title = "Potentiel Radon",
position = "topright") %>%
addCircles(data = EtablissementRadon@coords,
color= pal2(EtablissementRadon$ratio) ,
label = EtablissementRadon$nom_dept,
popup = str_c("<br/>Ratio :<br/>",EtablissementRadon@data$ratio,
"<br/>Commune :<br/>",EtablissementRadon@data$nom_comm ) )
}
else if(input$points=="Potentiel Radon par Commune"){
carteEtablissements %>% addPolygons( fillColor = ~pal2(ratio),
weight = 2,
opacity = 1,
color = "white",
dashArray = "3",
fillOpacity = input$opacity)%>% addLegend(pal = pal2,
values = ~ratio,
opacity = 0.7,
title = "Ratio incidence maladie X",
position = "bottomright") %>%
addPolygons( fillColor = ~pal(classe_potentiel),
weight = 2,
opacity = 1,
color = "White",
dashArray = "3",
fillOpacity = input$opacityRadon) %>%
addLegend(pal = pal,
values = ~classe_potentiel,
opacity = 0.7,
title = "Potentiel Radon",
position = "topright") %>%
addCircles(data = EtablissementRadon@coords,
color= pal(EtablissementRadon@data$classe_potentiel) ,
label = EtablissementRadon$nom_dept,
popup = str_c("<br/>Ratio :<br/>",EtablissementRadon@data$classe_potentiel,
"<br/>Commune :<br/>",EtablissementRadon@data$nom_comm ) )
}
else if(input$points=="Pas de Points"){carteEtablissements %>%
addPolygons( fillColor = ~pal2(ratio),
weight = 2,
opacity = 1,
color = "white",
dashArray = "3",
fillOpacity = input$opacity)%>% addLegend(pal = pal2,
values = ~ratio,
opacity = input$opacity,
title = "Ratio incidence maladie X",
position = "bottomright") %>%
addPolygons( fillColor = ~pal(classe_potentiel),
weight = 2,
opacity = 1,
color = "White",
dashArray = "3",
fillOpacity = input$opacityRadon) %>%
addLegend(pal = pal,
values = ~classe_potentiel,
opacity = 0.6,
title = "Potentiel Radon",
position = "topright")
}
})
},
options = list(width = "1400", height = "1000")
)
## PhantomJS not found. You can install it with webshot::install_phantomjs(). If it is installed, please make sure the phantomjs executable can be found via the PATH variable.
departements@data$ratio <- replace(departements@data$ratio, is.na(departements@data$ratio), 0)
#Voisinage pour autocorrelation
voisinQ=poly2nb(departements)
voisinR=poly2nb(departements, queen=FALSE)
coords = coordinates(departements)
#Matrice conguite
matrice_conguiteQ = nb2listw(voisinQ,zero.policy=TRUE)
#Bootstrap
bootstrap=moran.mc(departements$ratio,listw=matrice_conguiteQ, nsim=999)
#autocorrelogram
cor=sp.correlogram(voisinQ, departements$ratio, order=8, method="I", style="W",zero.policy=TRUE )
#stone
Coordonees <- EtablissementsPolluants %>% dplyr::select(Departement,lng,lat)
## Adding missing grouping variables: `Commune`
doublons <- which(duplicated(Coordonees$Departement))
Coordonees<-Coordonees[-doublons,]
Coordonees$Departement <- gsub("[[:punct:]]", "", as.character(Coordonees$Departement))
Coordonees$Departement <- tolower(Coordonees$Departement)
stoneTest <- merge(ratioEvenement,Coordonees,by.x="dep" ,by.y="Departement")
ratioRadon <- ratioRadon %>% select(dep,ratio,classe_potentiel)
colnames(stoneTest) <- c("dep","Observed","commune","x","y")
stoneTest <- left_join(stoneTest,ratioRadon)
## Joining, by = "dep"
stoneTest <- stoneTest %>% filter(!is.na(stoneTest$ratio))
stoneTest <- stoneTest %>% filter(!is.na(stoneTest$classe_potentiel))
stoneTest<-cbind(stoneTest, Expected=stoneTest$classe_potentiel*stoneTest$ratio/stoneTest$classe_potentiel)
stoneTest <- stoneTest %>% dplyr::select(dep,Observed,Expected,x,y)
Afin d’etudier l’autocorrelation de l’incidence de la maladie X nous avons dabord construit un voisinage de type queen
plot(departements)
plot(voisinQ, coords, add=T, col=2)
legend("bottom",c("queen"),
text.col=c(2,3))
ensuite nous avons Crée une matrice de contiguité standardisée (type queen) pour pouvoir etudier l’autocorrelation spatiale par le test de Morane
matrice_conguiteQ
## Characteristics of weights list object:
## Neighbour list object:
## Number of regions: 96
## Number of nonzero links: 476
## Percentage nonzero weights: 5.164931
## Average number of links: 4.958333
##
## Weights style: W
## Weights constants summary:
## n nn S0 S1 S2
## W 96 9216 96 44.29206 391.9874
Nous avons effectué le test de Morane , avec le bootstrap , nous avons obtenu une p.value assez ellevé et un indice de Morane Negatif ce qui explique donc l’absence d’autocorrelation spatiale pour l’incidance de la maladie X en fonction des departements
moran.test(ratioEvenement$ratio, listw=matrice_conguiteQ, alternative="two.sided", randomisation=FALSE)
##
## Moran I test under normality
##
## data: ratioEvenement$ratio
## weights: matrice_conguiteQ
##
## Moran I statistic standard deviate = 0.14069, p-value = 0.8881
## alternative hypothesis: two.sided
## sample estimates:
## Moran I statistic Expectation Variance
## -0.001007117 -0.010526316 0.004578167
hist(bootstrap$res, freq=TRUE,breaks=20, xlab="Simulated Moran's I")
abline(v=0, col='red')
Meme resultats , qui expliquee l’absence d’autocorrelation spatial par rapport a l’incidence de la maladie X
geary.test(ratioEvenement$ratio, listw=matrice_conguiteQ, alternative="two.sided")
##
## Geary C test under randomisation
##
## data: ratioEvenement$ratio
## weights: matrice_conguiteQ
##
## Geary C statistic standard deviate = -0.58119, p-value = 0.5611
## alternative hypothesis: two.sided
## sample estimates:
## Geary C statistic Expectation Variance
## 1.041589500 1.000000000 0.005120805
Nous avons ensuite effectué un autocorrelogramee pour confirmer l’Hypotese que l’incidence de la maladie est independante de ca localisation geographique
plot(cor)
Nous avons appliquer le test de Stone sur l’incidance de la maladie X par rapport au potentiel radon par departement la p.value est toujours tres elevé ce qui montre l’absence d’autocorrelation spatiale entre ces 2 attributs , Voici Un Exemple pour Paris
stone.test(Observed~offset(log(Expected)), stoneTest, model="poisson", R=99,region="paris", lambda=1)
## Stone's Test for raised incidence around locations
##
## Type of boots.: parametric
## Model used when sampling: Poisson
## Number of simulations: 99
## Statistic: 1
## p-value : 1
vous Pouvez trouvez l’application Shiny sur le fichier Appli Shiny